/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名: com.oceansoft.mobile.econsole.modules.accident.persistence.IAccidentMapper
 * <p>
 * 类产生时间: 2014-08-17 14:31
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 苏州公安移动门户
 * <p>
 * 部门: 手持技术部
 * <p>
 * <p>
 */
package com.oceansoft.mobile.econsole.modules.accident.persistence;

import com.oceansoft.mobile.econsole.modules.accident.entity.AccidentInfo;
import com.oceansoft.mobile.econsole.modules.accident.entity.AccidentMain;
import com.oceansoft.mobile.econsole.modules.accident.entity.AccidentPhoto;
import com.oceansoft.mobile.econsole.modules.base.entity.Query;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author chenw
 * @time 2014-08-17 14:31
 */
@Repository
public interface IAccidentMapper {
    /**
     * 持久化事故基本信息
     *
     * @param accidentMain 事故主信息
     * @return int 返回值>1保存成功,反之失败
     */
    int saveMain(AccidentMain accidentMain);

    /**
     * 持久化事故基本信息
     *
     * @param accidentInfo 事故基本信息
     * @return int 返回值>1保存成功,反之失败
     */
    int save(AccidentInfo accidentInfo);

    /**
     * 更新事故处理方式
     *
     * @param accidentInfo 事故信息实体对象
     * @return int
     */
    int updateAccidentBaseInfo(AccidentInfo accidentInfo);

    /**
     * 更新事故处理方式
     *
     * @param accidentInfo 事故信息实体对象
     * @return int
     */
    int updateAccidentBaseInfoHandlerAndStatus(@Param("accidentId")String accidentId, @Param("handler")int handler, @Param("status")int status);
    /**
     * 更新事故信息
     *
     * @param accidentInfo 事故信息实体对象
     */
    int update(AccidentInfo accidentInfo);

    /**
     * 判断当前用户是否重复上报
     *
     * @param userId     上报用户ID
     * @param otherLPN   对方车牌号码
     * @param reportTime 上报时间
     * @return List<AccidentInfo> 满足条件的事故集合
     */
    List<AccidentInfo> loadAccident(String userId, String otherLPN, Date reportTime);

    /**
     * 通过对方的相关信息查询上报信息集合
     *
     * @param telB       对方手机号码
     * @param lpnB       对方车牌号
     * @param reportTime 对方上报时间
     * @return
     */
    List<AccidentInfo> loadAccidentByOtherInfo(String telB, String lpnB, String reportTime);

    /**
     * 保存事故图片信息
     *
     * @param accidentPhoto 事故图片信息
     * @return AccidentPhoto
     */
    int savePhoto(AccidentPhoto accidentPhoto);

    int updatePhoto(AccidentPhoto photo);

    int countSameTypePics(AccidentPhoto photo);

    /**
     * 查询当前用户当天已经上传的事故信息
     *
     * @param lpnA       当前车主车牌号
     * @param lpnB       对方车主车牌号
     * @param reportTime 上报时间
     * @return 上报次数
     */
    List<AccidentInfo> loadAccidentBySelfInfo(String lpnA, String lpnB, String reportTime);

    /**
     * 根据条件查询事故主信息列表
     *
     * @param query
     * @return
     */
    List<AccidentInfo> findAccMainPageByCondition(Query query);

    /**
     * 查询主信息记录数
     *
     * @param query
     * @return
     */
    int findAccMainCountByCondition(Query query);

    /**
     * 根据事故ID查询事故明细
     *
     * @param accidentId
     * @return
     */
    List<AccidentInfo> findAccInfoByAccId(String accidentId);

    /**
     * 查询事故明细的图片信息
     *
     * @param accidentId 事故ID
     * @param userId     用户ID
     * @return List<AccidentPhoto>
     */
    List<AccidentPhoto> findAccPhoto(@Param("accidentId") String accidentId, @Param("userId") String userId);

    /**
     * 查询当前用户当天上传的信息未生成事故编号的
     *
     * @return
     */
    List<AccidentInfo> loadAccidentByUserid(String userid);

    /**
     * 获取当前的事故ID
     *
     * @return
     */
    String currnId();

    /**
     * 更新事故编号信息
     *
     * @param accidentInfo 事故信息实体对象
     */
    int updateId(AccidentInfo accidentInfo);

    /**
     * 根据用户ID及事故流水号查找事故信息
     *
     * @param userId     用户ID
     * @param accidentId 事故ID
     * @return AccidentInfo
     */
    AccidentInfo findAccInfoByAccUserIdAndAccident(@Param("userId") String userId, @Param("accidentId") String accidentId);

    List<AccidentInfo> findAccidentInfoListByPage(int userId, int status, String startdate, String enddate, String cardnum);

    /**
     * 加载事故当事人保险标识图片数据
     *
     * @param userid 用户ID
     * @param accid  事故ID
     * @return 事故图片列表
     */
    public List<AccidentPhoto> findAccidentInsurancePhotos(int userid, String accid);

    /**
     * 更新事故主表状态信息
     *
     * @param userId     用户ID
     * @param accidentId 事故ID
     * @param status     事故状态
     */
    int updateAccidentBaseInfoStatus(int userId, String accidentId, int status);

    void deleteAccidentPhoto(int userId, String accidentId);

    /**
     * 加载事故现场全部图片
     *
     * @param accidentId 事故编号
     * @return List<AccidentPhoto>
     */
    List<AccidentPhoto> findAccidentPhotoByOrder(@Param("accidentId") String accidentId);
}
